package com.ee.chat.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ee.chat.common.entity.Host;
import org.apache.ibatis.annotations.Param;

import java.util.*;

/**
 * <p>
 * Mapper接口
 * </p>
 *
 * @author Shane
 * @since 2019-07-11
 */
public interface HostMapper extends BaseMapper<Host> {
    /**
     * 根据id查询主播对象
     * @Author Shane
     * @Date 2019/7/3121:40
     * @param
     * @return
     **/
    Host selectByUserId(@Param("userId") Integer userId);

    /**
     * 获取头衔主播列表
     * @Author Shane
     * @Date 2019/7/2511:08
     * @param
     * @return
     **/
    List<Map<String, Object>> getHostTitles(@Param("userId") Integer userId, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取热门主播
     * @Author Shane
     * @Date 2020/7/18 13:05
     * @param
     * @return
     */
    List<Map<String, Object>> getHotHosts(@Param("historyUserIds") Set historyUserIds, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 根据上线的主播列表
     * @Author Shane
     * @Date 2019/7/26 0:21
     * @param
     * @return
     */
    List<Map<String, Object>> getHostByOnlineTime(@Param("historyUserIds") Set historyUserIds, @Param("offset") Long offset, @Param("rows") Integer rows);


    /**
     * 根据上线的用户列表
     * @Author Shane
     * @Date 2019/7/26 0:21
     * @param
     * @return
     */
    List<Map<String, Object>> getUserByOnlineTime(@Param("historyUserIds") Set historyUserIds, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 根据入驻时间获取主播列表
     * @Author Shane
     * @Date 2019/7/26 0:58
     * @param
     * @return
     */
    List<Map<String, Object>> getHostByCreateTime(@Param("historyUserIds") Set historyUserIds, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 根据注册时间获取用户列表
     * @Author Shane
     * @Date 2019/7/26 0:58
     * @param
     * @return
     */
    List<Map<String, Object>> getUserByCreateTime(@Param("historyUserIds") Set historyUserIds, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取关注的用户
     * @Author Shane
     * @Date 2020/3/30 12:12
     * @param
     * @return
     */
    List<Map<String, Object>> getFocusUsers(@Param("userId") Integer userId, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取粉丝用户
     * @Author Shane
     * @Date 2020/3/30 12:12
     * @param
     * @return
     */
    List<Map<String, Object>> getFansUsers(@Param("userId") Integer userId, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取同城主播
     * @Author Shane
     * @Date 2020/4/1 22:09
     * @param
     * @return
     */
    List<Map<String, Object>> getLocalHosts(@Param("lnglat") String lnglat, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取同城主播
     * @Author Shane
     * @Date 2020/4/1 22:09
     * @param
     * @return
     */
    List<Map<String, Object>> getLocalUsers(@Param("lnglat") String lnglat, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 推荐随机在线主播
     * @Author AppiJ
     * @Date 2020/11/13 11:43
     * @param
     * @return
     */
    Map<String, Object> getRandomOnlineHost(@Param("historyUserIds") Set historyUserIds);

    /**
     * 获取主播权重信息
     * @Author Shane
     * @Date 2019/7/2517:13
     * @param
     * @return
     **/
    List<Map<String, Object>> getHostWi();

    /**
     * 根据id获取主播列表
     * @Author Shane
     * @Date 2019/7/25 23:32
     * @param
     * @return
     */
    List<Map<String, Object>> getHostsByUserIds(@Param("hostUserIds") Collection<Integer> hostUserIds);

    /**
     * 获取关注的主播
     * @Author Shane
     * @Date 2020/3/30 12:13
     * @param
     * @return
     */
    List<Map<String, Object>> getFocusHosts(@Param("userId") Integer userId, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取主播招呼用语
     * @Author Shane
     * @Date 2019/7/28 22:12
     * @param
     * @return
     */
    IPage<Map<String, Object>> getHostCallContents(Page page, @Param("userId") Integer userId, @Param("status") Integer status);

    /**
     * 获取用户招呼用语
     * @Author Shane
     * @Date 2019/7/28 22:12
     * @param
     * @return
     */
    IPage<Map<String, Object>> getUserCallContents(Page page, @Param("userId") Integer userId);

    /**
     * 获取主播招呼用语
     * @Author Shane
     * @Date 2019/8/11 21:04
     * @param userId    主播id
     * @param contentId 主播招呼id
     * @return
     */
    Map<String, Object> getHostCallContent(@Param("userId") Integer userId, @Param("contentId") Integer contentId);

    /**
     * 获取主播道招呼记录
     * @Author Shane
     * @Date 2019/8/11 21:10
     * @param userId    主播id
     * @param operationLogId   用户记录id
     * @return
     */
    Map<String, Object> getHostCallLog(@Param("userId") Integer userId, @Param("operationLogId") Integer operationLogId);

    /**
     * 保存主播打招呼记录
     * @Author Shane
     * @Date 2019/8/11 21:14
     * @param userId    主播id
     * @param operationLogId    用户记录id
     * @param contentId 主播招呼内容id
     * @return
     */
    int saveHostCallLog(@Param("userId") Integer userId, @Param("operationLogId") Integer operationLogId, @Param("contentId") Integer contentId);

    /**
     * 获取用户上线的操作记录
     * @Author Shane
     * @Date 2019/7/28 22:51
     * @param userId    用户id
     * @param type  类型，0-普通用户  1-主播
     * @return
     */
    List<Map<String, Object>> getUserOperation(@Param("userId") Integer userId, @Param("type") Integer type, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取用户主页简略信息
     * @Author Shane
     * @Date 2020/3/30 17:16
     * @param
     * @return
     */
    Map<String, Object> getUserHomeBrief(@Param("userId") Integer userId, @Param("toUserId") Integer toUserId);

    /**
     * 获取主播主页信息
     * @Author Shane
     * @Date 2019/7/28 23:52
     * @param
     * @return
     */
    Map<String, Object> getUserHome(@Param("userId") Integer userId, @Param("toUserId") Integer toUserId);


    /**
     * 获取主播个人资料
     * @Author Shane
     * @Date 2019/7/2918:19
     * @param
     * @return
     **/
    Map<String, Object> getUserInfo(@Param("userId") Integer userId, @Param("toUserId") Integer toUserId);

    /**
     * 获取主播相册
     * @Author Shane
     * @Date 2019/8/14 23:49
     * @param
     * @return
     */
    List<Map<String, Object>> getHostPhotos(@Param("userId") Integer userId);

    /**
     * 获取用户对主播的评价
     * @Author Shane
     * @Date 2019/7/29 0:20
     * @param
     * @return
     */
    List<Map<String, Object>> getUserToHostLables(@Param("userId") Integer userId);

    /**
     * 获取主播礼物列表
     * @Author Shane
     * @Date 2019/8/115:39
     * @param
     * @return
     **/
    List<Map<String, Object>> getHostGifts(@Param("userId") Integer userId);

    /**
     * 获取用户评价情况统计
     * @Author Shane
     * @Date 2019/8/115:42
     * @param
     * @return
     **/
    List<Map<String, Object>> getHostLike(@Param("userId") Integer userId);

    /**
     * 获取主播评价列表
     * @Author Shane
     * @Date 2019/8/115:58
     * @param
     * @return
     **/
    IPage<Map<String, Object>> getHostEvaluates(Page page, @Param("userId") Integer userId);

    /**
     * 获取用户评价记录的标签
     * @Author Shane
     * @Date 2019/8/117:23
     * @param logId 评价记录id
     * @return
     **/
    List<Map<String, Object>> getLogLables(@Param("logId") Integer logId);

    /**
     * 查询主播信息列表
     * @Author Shane
     * @Date 2019/9/1719:25
     * @param
     * @return
     **/
    IPage<Map<String, Object>> list(Page page, @Param("online") Integer online, @Param("title") Integer title,
                                    @Param("keyword") String keyword, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 推荐随机主播
     * @Author Shane
     * @Date 2019/10/10 22:22
     * @param
     * @return
     */
    List<Map<String, Object>> getRandomHosts(@Param("userId") Integer userId, @Param("keyword") String keyword, @Param("offset") Long offset, @Param("rows") Integer rows);
}